package com.itcast.activiti.utils;

import org.springframework.util.StringUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class TimeUtils {
    /**
     * 使用自定义时间格式化字符，格式化时间
     *
     * @param date    JDK8之前的时间格式 {@see java.util.Date}
     * @param pattern 时间格式化字符串，参见 {@see java.time.format.DateTimeFormatter}
     * @return 格式化后的字符串
     */
    public static String format(Date date, String pattern) {
        if (pattern == null || pattern.isEmpty()) {
            pattern = "yyyy-MM-dd HH:mm:ss";
        }
        return ofDate(date).format(DateTimeFormatter.ofPattern(pattern));
    }

    /**
     * 将 {@see java.util.Date} 转换为 {@see java.time.LocalDateTime}。
     * 使用默认时区。
     *
     * @param date JDK8之前的时间格式 {@see java.util.Date}
     * @return {@see java.time.LocalDateTime}
     */
    public static LocalDateTime ofDate(Date date) {
        return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
    }

    public static String format(Date date) {
        if (date == null) {
            return "";
        }
        return format(date, null);
    }

    public static String format(String seconds, String format) {
        if (seconds == null || seconds.isEmpty()) {
            return null;
        }
        if (format == null || format.isEmpty()) {
            format = "yyyy-MM-dd HH:mm:ss";
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(new Date(Long.valueOf(seconds) * 1000));
    }

    public static String dateDiff(String startTime, String endTime, String format) {
        if (!StringUtils.hasText(format)) {
            format = "yyyy-MM-dd HH:mm:ss";
        }
        // 按照传入的格式生成一个simpledateformate对象
        SimpleDateFormat sd = new SimpleDateFormat(format);
        long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数
        long nh = 1000 * 60 * 60;// 一小时的毫秒数
        long nm = 1000 * 60;// 一分钟的毫秒数
        long ns = 1000;// 一秒钟的毫秒数
        long diff;
        long day = 0;
        long hour = 0;
        long min = 0;
        long sec = 0;
        // 获得两个时间的毫秒时间差异
        try {
            diff = sd.parse(endTime).getTime() - sd.parse(startTime).getTime();
            day = diff / nd;// 计算差多少天
            hour = diff % nd / nh + day * 24;// 计算差多少小时
            min = diff % nd % nh / nm + day * 24 * 60;// 计算差多少分钟
            sec = diff % nd % nh % nm / ns;// 计算差多少秒
            // 输出结果
//            System.out.println("时间相差：" + day + "天" + (hour - day * 24) + "小时"
//                    + (min - day * 24 * 60) + "分钟" + sec + "秒。");
//            System.out.println("hour=" + hour + ",min=" + min);
            return hour + ":" + (min - day * 24 * 60) + ":" + sec;
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }


    public static void main(String[] args) {
        String startTime = "2021-01-20 09:58:23.551";
        String endTime = "2021-01-21 10:00:23.672";
        String format = "yyyy-MM-dd HH:mm:ss";
        System.out.println(dateDiff(startTime, endTime, format));


    }
}
